<?php
class DB extends Base{
	private $stmt=null;
	private $pdo=null;

	/* 用于设置成员属性（$path, $allowtype,$maxsize, $israndname, $thumb,$watermark）
	* 可以通过连贯操作一次设置多个属性值
	*@param	string	$key	成员属性名(不区分大小写)
	*@param	mixed	$val	为成员属性设置的值
	*@return	object		返回自己对象$this
	*/
	function set($key, $val) {
		$key = strtolower ( $key );
		if (array_key_exists ( $key, get_class_vars ( get_class ( $this ) ) )) {
			$this->setOption ( $key, $val );
		}

		return $this;
	}
	function __construct() {
		try {
			$username=USERNAME;
			$passwd=PWD;
			$this->pdo = new PDO ( 'mysql:host='.HOST.';dbname='.DB_NAME, $username, $passwd );
			$this->pdo->setAttribute ( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
		} catch ( PDOException $e ) {
			PSQL("<font color=red>链接数据库失败：<br>". $e->getMessage()."</font>");
		}
	}
	 /*准备sql 语句，但未执行
	 * PDO 中存在两种占位符
	 *   1.?参数				--索引数组，按索引顺序使用
	 *
	 *   2.名字参数			--关联数组，按名称使用，和顺序无关
	 *
	 *   已经放到服务器端，并已经编译
	 */
	public function prepareSQL($mysql) {
		try {
			if ($mysql==null) {
				throw new PDOException("sql cannot be null!");
			}
			PSQL($mysql);
			//准备好sql语句，已经放到服务器端，且已经编译
			$this->stmt=$this->pdo->prepare($mysql);
			return true;

		} catch (PDOException $e) {
			PSQL("<font color=red>准备SQL失败：<br>". $e->getMessage()."</font>");
			return false;
		}
	}
	/*
	 * 执行SQL 语句
	 *
	 *
	 */
	//执行sql语句
	public function excuteSQL($array) {
		try {
			$this->stmt->execute($array);
			return true;
		} catch (PDOException $e) {
			PSQL("<font color=red>执行SQL失败：<br>". $e->getMessage ()."</font>");
			return false;
		}
	}
	/*
	 * 返回查询结果
	 *     一条记录
	 */
	public function fetch($type="assoc"){
	try {
			if ($type=="index") {
				return $this->stmt->fetch(PDO::FETCH_NUM);
			}else {
				return $this->stmt->fetch(PDO::FETCH_ASSOC);
			}
		} catch (PDOException $e) {
			PSQL("<font color=red设置SQL传输模式失败：<br>". $e->getMessage ()."</font>");
			return null;
		}
	}
	/*
	 * 返回查询结果
	 *     结果集
	 */
	public function fetchAll($type="assoc"){
		try {
			if ($type=="index") {
				return $this->stmt->fetchAll(PDO::FETCH_NUM);
			}else {
				return $this->stmt->fetchAll(PDO::FETCH_ASSOC);
			}
		} catch (PDOException $e) {
			PSQL("<font color=red设置SQL传输模式失败：<br>". $e->getMessage ()."</font>");
			return null;
		}

	}
	public function rowCount(){
		return $this->stmt->rowCount();
	}

}